<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 4.2.1">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"www.lixiaofei.cn","root":"/","scheme":"Mist","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":false,"show_result":false,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":true,"storage":true,"lazyload":true,"nav":{"valine":{"order":-1}}},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}};
  </script>

  <meta name="description" content="上篇文章《编程环境》中，我们了解了如何搭建一个 Python 的编程环境。 有了编程环境之后，理论上就能实现任何想要的程序了。 如《DOOM 启世录》中所说：  如果你想动手开发什么全新的技术，你不需要几百万美元的资金，你只需要在冰箱里放满比萨和可乐，再有一台便宜的计算机，和为之献身的决心。  Python 编译器，就是我们的计算机，是我们征战星辰大海的装备。">
<meta property="og:type" content="article">
<meta property="og:title" content="编程，真不难 3 —— 基础语法">
<meta property="og:url" content="http://www.lixiaofei.cn/2022-06-04-program-2/index.html">
<meta property="og:site_name" content="管窥程序">
<meta property="og:description" content="上篇文章《编程环境》中，我们了解了如何搭建一个 Python 的编程环境。 有了编程环境之后，理论上就能实现任何想要的程序了。 如《DOOM 启世录》中所说：  如果你想动手开发什么全新的技术，你不需要几百万美元的资金，你只需要在冰箱里放满比萨和可乐，再有一台便宜的计算机，和为之献身的决心。  Python 编译器，就是我们的计算机，是我们征战星辰大海的装备。">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://math.now.sh/?from=f(d%252Ct)%20%253D%20%5Cfrac%20d%20t%0A">
<meta property="og:image" content="http://www.lixiaofei.cn/images/2022/program_2/01.png">
<meta property="article:published_time" content="2022-06-04T00:44:44.000Z">
<meta property="article:modified_time" content="2022-06-09T04:42:36.086Z">
<meta property="article:author" content="太阳雪">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://math.now.sh/?from=f(d%252Ct)%20%253D%20%5Cfrac%20d%20t%0A">

<link rel="canonical" href="http://www.lixiaofei.cn/2022-06-04-program-2/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-CN'
  };
</script>

  <title>编程，真不难 3 —— 基础语法 | 管窥程序</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">管窥程序</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
      <p class="site-subtitle" itemprop="description">Today is a gift</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="main-menu menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a>

  </li>
        <li class="menu-item menu-item-about">

    <a href="/about/" rel="section"><i class="fa fa-user fa-fw"></i>关于</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>标签</a>

  </li>
        <li class="menu-item menu-item-categories">

    <a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>分类</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a>

  </li>
  </ul>
</nav>




</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>
  <div class="reading-progress-bar"></div>

  <a href="https://github.com/alisx" class="github-corner" title="Follow me on GitHub" aria-label="Follow me on GitHub" rel="noopener" target="_blank"><svg width="80" height="80" viewBox="0 0 250 250" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://www.lixiaofei.cn/2022-06-04-program-2/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.png">
      <meta itemprop="name" content="太阳雪">
      <meta itemprop="description" content="总结 技术 思考 想法">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="管窥程序">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          编程，真不难 3 —— 基础语法
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-calendar"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>

              <time title="创建时间：2022-06-04 08:44:44" itemprop="dateCreated datePublished" datetime="2022-06-04T08:44:44+08:00">2022-06-04</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="far fa-calendar-check"></i>
                </span>
                <span class="post-meta-item-text">更新于</span>
                <time title="修改时间：2022-06-09 12:42:36" itemprop="dateModified" datetime="2022-06-09T12:42:36+08:00">2022-06-09</time>
              </span>

          
            <span id="/2022-06-04-program-2/" class="post-meta-item leancloud_visitors" data-flag-title="编程，真不难 3 —— 基础语法" title="阅读次数">
              <span class="post-meta-item-icon">
                <i class="fa fa-eye"></i>
              </span>
              <span class="post-meta-item-text">阅读次数：</span>
              <span class="leancloud-visitors-count"></span>
            </span>
  
  <span class="post-meta-item">
    
      <span class="post-meta-item-icon">
        <i class="far fa-comment"></i>
      </span>
      <span class="post-meta-item-text">Valine：</span>
    
    <a title="valine" href="/2022-06-04-program-2/#valine-comments" itemprop="discussionUrl">
      <span class="post-comments-count valine-comment-count" data-xid="/2022-06-04-program-2/" itemprop="commentCount"></span>
    </a>
  </span>
  
  

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <p>上篇文章《<a href="https://mp.weixin.qq.com/s/8iyrWHThg0P8IojStSE2sQ" target="_blank" rel="noopener">编程环境</a>》中，我们了解了如何搭建一个 Python 的编程环境。</p>
<p>有了编程环境之后，理论上就能实现任何想要的程序了。</p>
<p>如《<a href="https://book.douban.com/subject/1152971/" target="_blank" rel="noopener">DOOM 启世录</a>》中所说：</p>
<blockquote>
<p>如果你想动手开发什么全新的技术，你不需要几百万美元的资金，你只需要在冰箱里放满比萨和可乐，再有一台便宜的计算机，和为之献身的决心。</p>
</blockquote>
<p>Python 编译器，就是我们的计算机，是我们征战星辰大海的装备。</p>
<a id="more"></a>
<p>程序都是由代码编写出来的，代码的编写具有一定的规则，了解这些规则，就能更容易地理解和编写程序逻辑了。</p>
<p>编码规则大体由 <strong>语法</strong> 和 <strong>流程控制</strong> 两部分组成。</p>
<p>虽然不同的编程语言，<strong>语法</strong> 和 <strong>流程控制</strong> 的形式有所不同，但含义和理念是相通的。</p>
<p>只要了解了一种编程语言的编码规则，学习其他编程语言，就容易多了。</p>
<p>今天，我们先来了解一下 Python 中的 <strong>基本语法</strong>。</p>
<h2 id="语法构成">语法构成</h2>
<p>编程语言的语法一般都由 <strong>关键字</strong>、<strong>变量</strong>、<strong>内部方法</strong> 和 <strong>块结构</strong> 四个部分构成。</p>
<p>Python 也一样。</p>
<p>先看一段 Python 的 <strong>示例代码</strong> （后面提到的 <code>示例代码</code>，就是这段代码）：</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">isInt</span><span class="params">(num)</span>:</span></span><br><span class="line">    <span class="keyword">try</span>:</span><br><span class="line">        v = int(num)</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line">    <span class="keyword">except</span> Exception:</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"></span><br><span class="line">inputValue = input(<span class="string">'输入一个数字：'</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> isInt(inputValue):</span><br><span class="line">    value = int(inputValue)</span><br><span class="line">    <span class="keyword">if</span> value &gt; <span class="number">10</span>:</span><br><span class="line">        print(<span class="string">'大于 10'</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        print(<span class="string">'不大于 10'</span>)</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">    print(<span class="string">'输入的不是数字'</span>)</span><br></pre></td></tr></table></figure>
<p>读者可能读不懂这段代码，不过没关系，今天我们只是了解代码的构成，对这段代码有个感官认识就可以了。</p>
<p>这段代码的整体作用是：引导用户输入一个数字，然后判断这个数字是否大于 10，并输出判断结果。</p>
<p>下面我们来看看，语法的四个部分的意义和表达方式。</p>
<h2 id="关键字">关键字</h2>
<p><strong>关键字</strong>，也被称为 <strong>保留字</strong>，是编程语言为了实现程序逻辑、提高编译效率，预先定义好一些单词。</p>
<p>比如，示例代码中，包含的关键字有：<code>if</code>、<code>else</code>、<code>def</code>、<code>try</code>、<code>True</code>、<code>False</code> 等。</p>
<p>关键字能帮助我们 <strong>组织程序逻辑</strong>，比如 <code>if</code> 用来表达一个判断，<code>def</code> 用来定义一个方法；</p>
<p>或者 <strong>代表某种数据或者含义</strong>，比如 <code>True</code> 表示逻辑真，<code>False</code> 表示逻辑假。</p>
<p>如何识别代码中的关键字呢？</p>
<p>除了记住之外，一般，代码编辑器都有<strong>语法高亮</strong>功能，会将当前编程语言中的 <code>关键字</code>、<code>内部方法</code> 等做不同的高亮处理，以便让程序员识别。</p>
<p>Python 中大概有三十多个<a href="https://www.w3school.com.cn/python/python_ref_keywords.asp" target="_blank" rel="noopener" title="Python 关键字">关键字</a>，而且随着 Python 语言功能的升级，关键字会有所变化。</p>
<p>想知道当前使用的 Python 编译器中，有哪些关键字吗？</p>
<p>很简单，在编译器的交互模式中，执行下面代码即可：</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> keyword</span><br><span class="line"></span><br><span class="line">print(keyword.kwlist)</span><br></pre></td></tr></table></figure>
<blockquote>
<p>将代码保存成代码文件，用执行模式执行也成</p>
</blockquote>
<p>这么多关键字，要记到啥时候去呀！？</p>
<p>不用着急，随着我们的学习和实践，理解并应用它们是自然而然的事情，而且常用的关键字，没几个。</p>
<h2 id="变量">变量</h2>
<p>一般我们对 <strong>变量</strong> 的理解是：一件事情或者过程中会发生变化的因素；或者初中数学中，函数的自变量 和 因变量。</p>
<p>感觉好像是：变量用来代表一个携带信息的容器。</p>
<p>如果有这样的认识，就太好了，因为程序中的 <strong>变量</strong> 就是用来存储各种各样数据的。</p>
<p>当我们需要：</p>
<ul>
<li><strong>记录数据</strong>，比如现在的统计值，或者处理到了第几个等；</li>
<li><strong>操作对象</strong>，比如读取文件内容，或者控制播放器等；</li>
<li><strong>传送信息</strong>，比如将计算结果返回出来，或者将数据交给其他程序去处理等；</li>
</ul>
<p>在这些时候，就需要用到变量了。</p>
<p>这些情况和我们日常生活离得很近，比如买菜时计算一下总金额，给朋友发段消息等，过程中，我们会将中间结果记在脑子里或者写在纸上，将信息输入微信里等</p>
<p>而程序中，需要将中间结果、信息等等记录在<strong>变量</strong>里。</p>
<p>不过程序中的变量很灵活，只要是能被存入计算机里的东西（数据或者信息，存入计算机的过程称作 <strong>信息化</strong>），都能用变量来记或者表示。</p>
<p>从某种意义上来说，<strong>编程就是对变量的处理加工过程</strong>。</p>
<p>既然变量是用来存储信息的空间（这种说法并不严谨），那么如何开辟或者得到这个空间呢？</p>
<p>这个开辟的过程，叫作 <strong>变量定义</strong> 或者 <strong>变量声明</strong>，通过这个过程，才能得到计算机内存中的一块区域，并且对这块区域命名，以便在程序中操作。</p>
<p>如何定义变量呢？</p>
<p>神奇的是，Python 中，不需要这个定义过程，需要使用变量时，起个名字，直接用就可以了，就好像这个变量代表的空间，早已开辟好了似的。</p>
<p>比如示例代码中：<code>inputValue = input('输入一个数字：')</code>，就是将用户的输入内容，存储到 <code>inputValue</code> 这个变量中，而 <code>inputValue</code> 这个变量是拿来就用的，我们看不到事先对它的声明。</p>
<p>这是因为 Python 是一种解释型的动态语言，编译器在理解代码时会做大量的补充工作，替我们做了我们所利用的变量的定义。</p>
<p>类似的动态语言还有 <a href="https://baike.baidu.com/item/javascript/321142" target="_blank" rel="noopener" title="Javascript">Javascript</a>，也不需刻意声明变量。</p>
<p>更神奇的是，Python 中的变量可以存储任何类型的数据或者信息，怎么回事呢？</p>
<p>我们在了解 <strong>对象</strong> 等概念时，再深入了解。</p>
<p>现在，我们只需要知道变量是用来存放数据的就行了，当遇到需要 记录、操作、传送数据时，知道应该使用变量即可。</p>
<h2 id="内部方法">内部方法</h2>
<p>除了关键字，还有一些类似关键字，具有一定功能的代码，比如示例代码中的 <code>input</code>、<code>print</code>、<code>int</code> 等，被称为 <strong>内部方法</strong>，是编译环境，为开发者更方便地实现功能，而提供的<strong>方法</strong>。</p>
<p>比如 <code>input</code> 可以获取用户的输入；<code>print</code> 可以在终端上打印一段字；<code>int</code> 尝试将一个字符串转化为整数。</p>
<h3 id="理解程序中的方法">理解程序中的方法</h3>
<p>要理解 <strong>内部方法</strong>，需要先理解什么是 <strong>方法</strong>。</p>
<p>编程语言中的方法，和我们日常理解中的方法类似，就是处理某个事情的操作步骤。</p>
<p>比如，处理电子邮件的步骤是：</p>
<p>输入身份验证信息、登录邮箱、进入收件箱、从邮件列表中，找到未读邮件……</p>
<p>将处理某件事的步骤整理在一起，就会形成一个方法，给这个方法起个名字，比如：<code>处理电子邮件</code>。</p>
<p>那么，程序中，将处理过程的代码，集中在一起，并给它们起个名字，就形成了方法，比如 <code>print</code>，就是将如何在终端屏幕上显示一段文本的方法，打包在其中，并命名以 <code>print</code>。</p>
<p>方法处理过程中，可能需要用到一些特定的数据，比如 <code>处理电子邮件</code> 方法中的身份验证信息，会因人而异。但对于方法本身来说，并不会因为这些特殊信息不同而不同。</p>
<p>以此，将方法处理过程中，需要的特定的信息称作 <strong>参数</strong>，在使用方法时，由使用者提供。</p>
<p>为啥将特殊数据称作参数呢？</p>
<p>是因为程序中的方法，和数学函数很像，实际上，程序中的方法就是源自于数学中的函数。</p>
<p>回想一下计算物体的速度的公式：速度 = 移动的距离 / 移动的时间。</p>
<p>写成函数就是:</p>
<p style=""><img src="https://math.now.sh?from=f%28d%2Ct%29%20%3D%20%5Cfrac%20d%20t%0A" /></p><p><code>d</code> 表示移动的距离，<code>t</code> 表示移动的时间。只要提供特定的距离和时间，就能算出对应的速度。</p>
<p>就是将参数代入函数，就能得到结果，那么这是不是和程序中的方法类似呢？简直就是一模一样。</p>
<p>因此，给程序中的方法提供的特殊数据，就被自然地称为<strong>参数</strong>了。</p>
<p>也正是因为程序中的方法与数学中的函数意义相同，方法也被称作 <strong>函数</strong>。</p>
<p>那么当提到<strong>方法</strong>和<strong>函数</strong>时，绝大多数情况下，指的是一会事儿。</p>
<hr>
<p>严格地说，内部方法不属于编程语言本身的一部分，因为，它们可以通过编程语言提供的能力来实现。</p>
<p>打个比方，如果编程语言是各种形状的积木块的话，内部方法就是已经拼接好的一些积木，理论上，我们完全可以通过积木来拼装任何内部方法。</p>
<p>但，如果任何功能都需要开发者自己去实现，是不现实的，而且开发过程中，大部分功能是类似，可以重复利用的。</p>
<p>因此，将这些常用的、与操作系统相关的功能，就被实现在了编程语言提供的编译环境中，不但可以节省开发时间，而且能保证功能的质量。因为我们不能指望一个连五金件都需要自己加工的装修队，能如期地、物美价廉地完成任务。</p>
<p>因此，需要了解基本的内部方法，以便我们能理解程序代码，并帮助我们实现特定功能。</p>
<p>有哪些内部方法呢？</p>
<p>随着实践的深入，会自然地了解相关内部方法，会像了解关键字一样，也是个自然而然的过程。</p>
<h2 id="块结构">块结构</h2>
<p>写文章，有段落结构，编写代码也一样，也有段落结构，即 <strong>块结构</strong>。</p>
<p>观察一下我们示例代码，不难发现，代码大体上分为三部分：</p>
<ul>
<li>
<p>第一部分由 <code>def</code> 开始；</p>
</li>
<li>
<p>第二部分由 <code>inputValue</code> 开始，只有一行；</p>
</li>
<li>
<p>剩下的是第三部分。</p>
</li>
</ul>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 第一部分</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">isInt</span><span class="params">(num)</span>:</span></span><br><span class="line">    <span class="keyword">try</span>:</span><br><span class="line">        v = int(num)</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line">    <span class="keyword">except</span> Exception:</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 第二部分</span></span><br><span class="line">inputValue = input(<span class="string">'输入一个数字：'</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 第三部分</span></span><br><span class="line"><span class="keyword">if</span> isInt(inputValue):</span><br><span class="line">    value = int(inputValue)</span><br><span class="line">    <span class="keyword">if</span> value &gt; <span class="number">10</span>:</span><br><span class="line">        print(<span class="string">'大于 10'</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        print(<span class="string">'不大于 10'</span>)</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">    print(<span class="string">'输入的不是数字'</span>)</span><br></pre></td></tr></table></figure>
<p>这些个部分，被称为 <strong>代码块</strong>，而整个代码，就是由多个代码块组合而成的。</p>
<p>代码块的组合方式就构成了编程语言的 <strong>块结构</strong>。</p>
<p>不同编程语言的 <strong>块结构</strong> 有所不同，不过大体分为两类：</p>
<p>第一类是由 <strong>块标识符</strong> 来标记，比如 Javascript，是用 <code>{}</code> 来定义块的：</p>
<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">hello</span>(<span class="params"></span>) </span>&#123;</span><br><span class="line">    <span class="built_in">console</span>.log(<span class="string">'Hello world'</span>)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> value = <span class="number">10</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>(value &gt; <span class="number">5</span>) &#123;</span><br><span class="line">    <span class="built_in">console</span>.log(<span class="string">"大于 5"</span>)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>第二类是通过代码的<strong>书写结构</strong>定义的，比如，Python。</p>
<p>书写结构定义方式，有个巨大的好处，就是编写的代码更规范。不需要刻意去做对齐，缩进等操作，代码自然而然是整齐统一的。</p>
<p>我们在第一篇文章 《<a href="https://mp.weixin.qq.com/s/84x-SAoazB6CvC5RFJiaEA" target="_blank" rel="noopener">编程，真的不难</a>》中，提到过，编码规范是编程中一个重要的问题，而我们用 Python 编程，能一定程度上提高编码的规范性。</p>
<p>Python 中，代码块是由 <strong>起始行，加行后的 <code>:</code>，以及起始行后的，比起始行缩进一个缩进单元的内容</strong> 构成的。</p>
<p>当要完成 <strong>判断</strong>、<strong>方法定义</strong>、<strong>类定义</strong>、<strong>异常检测</strong> 等功能时，需要使用块结构。</p>
<p>比如，示例代码中，第一部分是 <strong>方法定义</strong>，第三部分是 <strong>判断</strong>。</p>
<p>关于每种代码块的具体用法，我们在后面再详述，这里只做一个感性认识就行。</p>
<p>Python 中使用块结构，需要注意以下两点：</p>
<ol>
<li>
<p><strong>同一份代码文件中，缩进标准必须一致</strong>。比如都是 4 个空格，或者都是一个制表符。如果标准不同，编译器将不能正确识别编码逻辑；</p>
</li>
<li>
<p><strong>但凡表示块的地方，都是由 <code>:</code> 开始定义块内容的</strong>。也就是只有缩进并不一定就是块的内容，比如由于一行内容太长，分割成多行书写，或者再定义特殊的数据结构时。</p>
</li>
</ol>
<p>我们再观察一下上面的代码，还会发现，代码块的内部也是代码块，而且是可以层层嵌套，而形成了一种类似树的 <a href="https://zhuanlan.zhihu.com/p/103332312" target="_blank" rel="noopener">分型结构</a>：</p>
<p><img src="../images/2022/program_2/01.png" alt="分形树结构 局部"></p>
<p>这种代码块的组合形式，正是代码的组织方式。</p>
<p>另外我们也能了解到，块结构中，具有相同缩进的代码，是处于同等层次的，即 它们的起始行是对齐的。</p>
<p>比如，示例代码中，三个部分的起始行，都没有缩进，是处于同等层次的；第一部分内部，<code>try</code> 定义的异常检测块缩进了一个空白单位，而 <code>try</code> 内部比 <code>try</code> 多缩进了一个空白单位。</p>
<p>不同的层次会影响代码的执行流程，反之，可以通过控制代码的层次结构，来做代码的 <strong>流程控制</strong>。</p>
<h2 id="总结">总结</h2>
<p>今天，我们了解了 Python 中的基本语法，以及构成语法的几个部分：</p>
<p><strong>关键字</strong>、<strong>变量</strong>、<strong>内部方法</strong>、<strong>块结构</strong>。</p>
<p>为了更好地理解这些概念，留一个小作业，就是对示例代码，进行练习，要求是：</p>
<ol>
<li>在自己的编程环境中，运行示例代码</li>
<li>按照自己的想法改造示例代码</li>
</ol>
<p>练习中会遇到一些问题，可以先尝试自己寻找答案，比如找人讨论、或者在网上搜索，或者将问题附在留言中。</p>
<p>可能会觉得对 Python 还不懂，不知道如何表达自己的想法，或者从何写起。</p>
<p>其实不用担心，编程本身就是个不断探索的过程，而诸多经验技能都是从探索中得到的。</p>
<p>另外，也不要担心自己的探索会毁掉计算机，或者引发核战争哈哈，尽管尝试，现在的计算机，像是个坚强的、自我保护能力强大的、贴心的玩具，只要不对它进行物理伤害，可以随便玩。</p>
<p>下期，我们将一起了解如何控制程序流程，以表达丰富的程序逻辑。</p>
<p>笔者的水平有限，文章中难免出现各种错误和问题，恳请读者不吝批评、指正。十分感谢！</p>
<p>比心！</p>

    </div>

    
    
    

      <footer class="post-footer">

        

			<div id="wechat_subscriber" style="display: block; padding: 10px 0; margin: 20px auto; width: 100%; text-align: center">
    <img id="wechat_subscriber_qcode" src="/images/wechat-qcode.png" alt="太阳雪 wechat" style="width: 200px; max-width: 100%;"/>
    <div>关注我，获得更多精彩内容</div>
</div>

        
		
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/2022-05-29-program-1/" rel="prev" title="编程，真不难 2 —— 编程环境">
      <i class="fa fa-chevron-left"></i> 编程，真不难 2 —— 编程环境
    </a></div>
      <div class="post-nav-item">
    <a href="/2022-06-09-program-3/" rel="next" title="编程，真不难 —— 流程控制">
      编程，真不难 —— 流程控制 <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          
    <div class="comments" id="valine-comments"></div>

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#语法构成"><span class="nav-number">1.</span> <span class="nav-text">语法构成</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#关键字"><span class="nav-number">2.</span> <span class="nav-text">关键字</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#变量"><span class="nav-number">3.</span> <span class="nav-text">变量</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#内部方法"><span class="nav-number">4.</span> <span class="nav-text">内部方法</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#理解程序中的方法"><span class="nav-number">4.1.</span> <span class="nav-text">理解程序中的方法</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#块结构"><span class="nav-number">5.</span> <span class="nav-text">块结构</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#总结"><span class="nav-number">6.</span> <span class="nav-text">总结</span></a></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image" alt="太阳雪"
      src="/images/avatar.png">
  <p class="site-author-name" itemprop="name">太阳雪</p>
  <div class="site-description" itemprop="description">总结 技术 思考 想法</div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">88</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
            <a href="/categories/">
          
        <span class="site-state-item-count">14</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
          
        <span class="site-state-item-count">47</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2022</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">太阳雪</span>
</div>
  <div class="powered-by">由 <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> & <a href="https://mist.theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Mist</a> 强力驱动
  </div>

        








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/muse.js"></script>


<script src="/js/next-boot.js"></script>




  
  <script>
    (function(){
      var canonicalURL, curProtocol;
      //Get the <link> tag
      var x=document.getElementsByTagName("link");
		//Find the last canonical URL
		if(x.length > 0){
			for (i=0;i<x.length;i++){
				if(x[i].rel.toLowerCase() == 'canonical' && x[i].href){
					canonicalURL=x[i].href;
				}
			}
		}
    //Get protocol
	    if (!canonicalURL){
	    	curProtocol = window.location.protocol.split(':')[0];
	    }
	    else{
	    	curProtocol = canonicalURL.split(':')[0];
	    }
      //Get current URL if the canonical URL does not exist
	    if (!canonicalURL) canonicalURL = window.location.href;
	    //Assign script content. Replace current URL with the canonical URL
      !function(){var e=/([http|https]:\/\/[a-zA-Z0-9\_\.]+\.baidu\.com)/gi,r=canonicalURL,t=document.referrer;if(!e.test(r)){var n=(String(curProtocol).toLowerCase() === 'https')?"https://sp0.baidu.com/9_Q4simg2RQJ8t7jm9iCKT-xh_/s.gif":"//api.share.baidu.com/s.gif";t?(n+="?r="+encodeURIComponent(document.referrer),r&&(n+="&l="+r)):r&&(n+="?l="+r);var i=new Image;i.src=n}}(window);})();
  </script>















  

  


<script>
NexT.utils.loadComments(document.querySelector('#valine-comments'), () => {
  NexT.utils.getScript('//unpkg.com/valine/dist/Valine.min.js', () => {
    var GUEST = ['nick', 'mail', 'link'];
    var guest = 'nick,mail';
    guest = guest.split(',').filter(item => {
      return GUEST.includes(item);
    });
    new Valine({
      el         : '#valine-comments',
      verify     : false,
      notify     : false,
      appId      : 'teRj7yeJj0xpfGKLJ5uFdbIu-gzGzoHsz',
      appKey     : '3uie0p1nxouCCnkjiXTEBeLd',
      placeholder: "您的关注是我的动力",
      avatar     : 'mm',
      meta       : guest,
      pageSize   : '10' || 10,
      visitor    : true,
      lang       : 'zh-cn' || 'zh-cn',
      path       : location.pathname,
      recordIP   : false,
      serverURLs : ''
    });
  }, window.Valine);
});
</script>

</body>
</html>
